2025-0922-2136 gdc - Pondering Orbs - The Rendering and Art Tools of COCOON
Slip-box
To be fleeting notes
Fleeting
To be literature notes (Understanding)
L-Origin
下面是《COCOON:球体的渲染与美术工具》要点的中文速读版——聚焦“怎么做、为什么这么做、可借鉴什么”。
概览
-
Unity 2020 LTS(URP 10)+ 大量自研光照/体积/折射方案;“世界中的世界(Orbs)”以多相机合成与一系列剔除/裁剪优化实现。
-
整体追求:统一的体积/环境光照、极低开销与清晰的美术控制,可在 Switch 等弱平台稳定运行。
全局/间接光:体素化 SH(替代 GI)
-
用体素体积 + 球谐(SH)一阶存辐照度(Ambient + 方向3通道,HDR)。
-
压缩技巧:Ambient 用 BC6H(unsigned),方向分量除以 Ambient 归一化后用 BC1,合计约 24 bits/voxel。
-
不做 Lightmap UV:体素避免参数化,透明/雾/骨骼网兼容。
-
烘焙“伪射线追踪”:滥用栅格化器当射线器——实例化切片渲染 3D 纹理,顶点着色器设 slice id + 偏移;随机射线矩阵(方向/抖动/near 偏移)避免自阴影。
-
顶点遮蔽(Vertex occlusion):用 SH triple product 融合,显著降低体素分辨率需求,可手涂微调。
体积雾(核心系统)
-
预积分体素雾(单次散射):体素里预存“眼到体素”的累积贡献 → 渲染几何时一次采样拿全程雾;天然兼容 MSAA。
-
雾直接采样体素光照(与环境一致),避免“远处背光却发白”的违和。
-
纯空间滤波(无时间反馈):对阴影/雾用 mip + ddx/ddy/ddset 手算 LOD,稳定不抖。
-
体积盒可视化:再度滥用栅格化——向 layer buffer 画四个侧面切片,利用 near/far 平面裁剪只在盒内生成 fragment,用硬件混合叠加多个雾体。
“世界中的世界”与传送门
-
两机位合成:先渲内层,再主相机;不清屏叠加。
-
开销控制
-
颜色矩阵裁剪到球面、scissor 裁切、深度预写入遮掉多余像素。
-
远景用静态阴影贴图(BC4/BC6H)代替实时阴影。
-
鱼眼扭曲先小图渲再拉伸,减少片段着色数。
-
Warp 时改near plane、用 16-bit depth(平台快),并避开近处伪影。
-
-
角色一次渲两端:按两相机相对变换“瞬移”复用网格,避免第三相机。
阴影与接地
-
角色近处用**“线段+羽化”胶囊影**(从光源投影两段到地面,厚度+模糊),比低分阴影图干净。
-
门/体积等用门框遮片 + 定向灯复制做“跨世界一致阴影”。
折射/反射/水体
-
玻璃:常规高光 + 假屏幕反射(包裹环境纹理)+ 轻度“奶化”压对比。
-
水面:岸线 SDF(shore map)驱动边缘涟漪;双法线贴图叠加,并按岸向做各向异性拉伸,让纹理与岸向一致。平面反射为低分+MSAA,阴影用静态贴图。
-
雨涟漪:Voronoi/ID 贴图驱动相位、方向,与岸线方案同源。
-
深度范围采样的抗伪影:对下采样深度,用 gather 先做 smoothstep/范围运算再插值,消除边缘台阶(适用于折射雾、地面遮罩等)。
球体/雾内特效
-
球内雾:固定步长 ray march;按步长对 alpha 幂修正,保证线性累计。
-
体积光“角度步进”(Simon Brown):沿角度域积分,结合
-
异质项外提(只在循环内积 cookie);
-
双线性 + worst-case mip 代替三线性;
-
循环外预算旋转,免三角函数。
-
-
结晶桥:体积 Voronoi(最近胞元 + 下一交点),表里分别着色 + 折射混合;再乘滚动辐照度纹理上色。
“显/隐”能力与过渡
-
柱体隐身:盒内 ray march,采样 Ambient(无方向)+ 太阳 + 球灯,统一于全局光模型,贴地自然。
-
过渡层次:clip distance 平面切割几何 → 两侧各加一层发光罩(同平面渐显)隐藏接缝,稳定、对硬件友好。
-
有机膜/琥珀:离屏场景 + 折射 + 定向模糊掩盖低分;外层仅自背面投影,避免自阴影;需要看见玩家时抓取 opaque pass 含雾的缓冲即可。
绩效/工程习惯清单
-
一着色器多用途:Bake/Run 时以宏接入烘焙顶点程序,减少分叉与复制错误。
-
静态可序列化资源(如整图阴影)换取运行时开销。
-
裁剪优先:颜色矩阵、scissor、深度 mask,先砍 draw call/fragment 再谈 shader。
-
避免时间累积:体积雾全用空间 mip,玩法可即时改密度/光照不拖影。
-
MSAA-only 场景严控插值/滤波引入的“新锯齿”(gather 方案等)。
可直接借鉴的 10 个小招
-
用体素 + 低阶 SH替代通用 GI,配合 BC6H/BC1 压缩到 24b/voxel。
-
栅格器当射线器做离线烘焙与体素化/盒体可视化。
-
预积分体积雾:一次采样拿全程雾,兼容 MSAA。
-
胶囊影用两条线段投影实现,干净省算。
-
鱼眼+小渲大显削片段量;Warp 时 16bit depth + 远近面调教。
-
岸线 SDF驱动水边涟漪与各向异性法线拉伸。
-
深度范围用 gather→运算→插值,解决下采样边缘伪影。
-
体积光用角度步进 + 免三角 + mip 策略控噪降本。
-
clip distance 分层过渡,稳定隐藏透明/不透明切换接缝。
-
跨世界合成尽量用静态阴影 + 剪裁矩形 + 深度预写,少开相机与后效。
一句话:COCOON 用“体素化统一光照 + 滥用栅格化器完成体积/烘焙/可视化 + 一堆细致的采样与压缩技巧”把“世界套世界”的复杂画面做到了稳定、轻量、可美术掌控,这套思路对独立与移动/主机跨平台项目都很有参考价值。
L-My Words
L-Zotero citation key
To be permanent notes (Complete Ideas)
P-Self Explained Sentences
P-Connection
- Parent
- Caused by::
- - Driven by::
- - Cite from::
-
- Caused by::
- Child
- Excalidraw::
- - Is source of::
- - Including::
- - Have Example::
- - Contributes to::
- - Consist of::
-
- Excalidraw::
- Friend
- Left
- Achieved with::
- - Affected by::
- - Supported by::
- - Enhanced by::
- - related::
-
- Achieved with::
- Right
- against::
- - Opposites::
-
- against::
- Left